import Vue from 'vue'

// v-dialogDrag: 弹窗拖拽
Vue.directive('dialogDrag', {

    bind(el, binding, vnode, oldVnode) {

        //弹框可拉伸最小宽高

        let minWidth = 400;

        let minHeight = 300;

        //初始非全屏

        let isFullScreen = false;

        //当前宽高

        let nowWidth = 0;

        let nowHight = 0;

        //当前顶部高度

        let nowMarginTop = 0;

        //获取弹框头部（这部分可双击全屏）

        const dialogHeaderEl = el.querySelector('.el-dialog__header');

        //弹窗

        const dragDom = el.querySelector('.el-dialog');

        //给弹窗加上overflow auto；不然缩小时框内的标签可能超出dialog；

        // dragDom.style.overflow = "auto";

        //清除选择头部文字效果

        //dialogHeaderEl.onselectstart = new Function("return false");

        //头部加上可拖动cursor

        dialogHeaderEl.style.cursor = 'move';

        // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);

        const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);

        let moveDown = (e) => {

            // 鼠标按下，计算当前元素距离可视区的距离

            const disX = e.clientX - dialogHeaderEl.offsetLeft;

            const disY = e.clientY - dialogHeaderEl.offsetTop;

            // 获取到的值带px 正则匹配替换

            let styL, styT;

            // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px

            if (sty.left.includes('%')) {

                styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100);

                styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100);

            } else {

                styL = +sty.left.replace(/\px/g, '');

                styT = +sty.top.replace(/\px/g, '');

            }
            ;

            document.onmousemove = function (e) {

                // 通过事件委托，计算移动的距离

                const l = e.clientX - disX;

                const t = e.clientY - disY;

                // 移动当前元素

                dragDom.style.left = `${l + styL}px`;

                dragDom.style.top = `${t + styT}px`;

                //将此时的位置传出去

                //binding.value({x:e.pageX,y:e.pageY})

            };

            document.onmouseup = function (e) {

                document.onmousemove = null;

                document.onmouseup = null;

            };
        }

        dialogHeaderEl.onmousedown = moveDown;
    }
});

Vue.directive('tit',{
  inserted(el,binding){
    let title = document.createElement('p');
    el.classList.add('tit-wrap');
    title.classList.add('tit')
    title.innerHTML = binding.value;
    el.prepend(title)
  }
})

Vue.directive('hasPermi',{
  inserted(el, binding, vnode) {
    const { value } = binding;
    const all_permission = "*:*:*";
    let permissions = vnode.context.$store.state.btnPermission;
    if (permissions.length === 0) {
      permissions = JSON.parse(sessionStorage.getItem("btnPermission"));
    }
    if (value && value instanceof Array && value.length > 0) {
      const permissionFlag = value;

      const hasPermissions = permissions.some((permission) => {
        return (
          all_permission === permission || permissionFlag.includes(permission)
        );
      });

      if (!hasPermissions) {
        el.parentNode && el.parentNode.removeChild(el);
      }
    } else {
      console.log('请设置操作权限标签值');
      // throw new Error(`请设置操作权限标签值`);
    }
  },
})